package com.jfx.week1._02_stage_scene_node;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;

/**
 * Nodes(节点)：附加到Scence上的 所有组件都称为节点
 * 节点分两种：
 * 分支节点，可以包含其他节点
 * 叶子节点，不可以包含其他节点
 * <p>
 * 主要内容讲解：
 * JavaFX Node类 和 直接继承或间接继承Node类，都具备以下公共属性：
 * 1.坐标系：起点为左上角 0 0，X轴向右为正，Y轴向下为正
 * 2.布局边界范围（layoutX , layoutY）：父布局与子布局都具备 （layoutX和layoutY是相对于父节点0,0的偏移量）
 * 3.首选高度，首选度度（Preferred height ，Preferred width）
 * 4.最小高度，最小宽度（Minimum height，Minimum width）
 * 5.最大高度，最大宽度（Maximum height，Maximum width）
 * 6.用户数据（User data）
 * 7.项目（子节点）（Items (Child nodes)）
 */
public class Node_ extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        /*
         * 思路流程
         * 布局代码一式三份，属性全部一致，只不过设置的参数不同
         * 1.创建三个布局，设置相同属性的不同参数，以作区别
         * 2.把子布局放到父布局上
         * 3.把父布局Parent放到Scene（场景上）
         * 4.把场景放到窗口上
         * 5.设置窗口大小标题，然后展示窗口
         */

        //        布局1
        Pane parent = new Pane(new Label("parent"));
        parent.setStyle("-fx-background-color: #00ffff; -fx-font-size: 50;");
        parent.setPrefWidth(500);
        parent.setPrefHeight(500);
        parent.setLayoutX(20);
        parent.setLayoutY(20);
        parent.setUserData("我是Parent");
        Object userData = parent.getUserData();
        System.out.println("parent--用户数据--->" + userData);

        //        布局2
        Pane children = new Pane(new Label("children"));
        children.setStyle("-fx-background-color: bisque; -fx-font-size: 30;");
        children.setPrefWidth(300);
        children.setPrefHeight(300);
        children.setLayoutX(80);
        children.setLayoutY(80);
        children.setUserData("我是children");
        Object childrenData = children.getUserData();
        System.out.println("childrenData--用户数据--->" + childrenData);

        //        布局3
        Pane children_children = new Pane(new Label("children_children"));
        children_children.setStyle("-fx-background-color: burlywood; -fx-font-size: 10;");
        children_children.setPrefWidth(100);
        children_children.setPrefHeight(100);
        children_children.setLayoutX(50);
        children_children.setLayoutY(50);
        children_children.setUserData("我是children_children");
        Object children_children_Data = children_children.getUserData();
        System.out.println("children_children_Data--用户数据--->" + children_children_Data);


//     创建三个布局，设置相同属性的不同参数，以作区别
//     把子布局放到父布局上
//     把父布局Parent放到Scene（场景上）
//     把场景放到窗口上
//     设置窗口属性，然后展示窗口
        parent.getChildren().addAll(children);
        children.getChildren().addAll(children_children);

        Scene scene = new Scene(parent);
        primaryStage.setScene(scene);
        primaryStage.setTitle("Node效果展示");
        primaryStage.setWidth(600);
        primaryStage.setHeight(600);
        primaryStage.show();

        //        用户数据
        //        您可以使用setUserData() 方法在JavaFX节点上设置用户数据。
        //        可以将业务对象附加到 JavaFX Node实例。
        //        node.setUserData(new MyObject("Hey - some data"));
    }

    @Override
    public void init() {
        System.out.println("生命周期监听---初始化完成---init");
    }

    @Override
    public void stop() {
        System.out.println("生命周期监听---程序已经停止---stop");
    }
}
